home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
QRZ! Ham Radio 8
/
QRZ Ham Radio Callsign Database - Volume 8.iso
/
pc
/
files
/
mac
/
proj_b2.hqx
/
Project Mac - B2
/
Satellit
< prev
next >
Wrap
Text File
|
1987-11-30
|
24KB
|
687 lines
10 ' Compiler Version
20 '
30 ' Change About Box with ResEdit
' ++++++++++++++++++++++++++++++++++++++++++++++++
' +++ Berechnung von elliptischen Umlaufbahnen +++
' +++ (DJ 1 VA) (DB2OS) +++
' +++ Sun Nov 29, 1987 18:12:54 +++
' +++ V 1.5 +++
' +++ Macintosh Modifikation von DJ 1 VA +++
' ++++++++++++++++++++++++++++++++++++++++++++++++
40 LIBRARY "Satellit"
50 ' LIBRARY for Compiler Version in RS Fork
60 ' INITIALISIERUNG
70 ' ================
80 '
90 ' CLR Toolbox required for Interpreter Version
100 CLEAR : CLS : RESTORE
103 ON ERROR GOTO 12000
104 Version$ = "1.5 D1"
ref% = 0
106 OpenResFile "Satellit",ref%
DIM Cursor% (33)
LoadCursor ref%,5,Cursor%(0)
CALL SETCURSOR (VARPTR(Cursor%(0)))
105 DEFSNG X-Y
120 DEF FNELL(X) = SQR(B^2*(1-(X^2/A^2)))
130 CALL TEXTFONT (1) : CALL TEXTSIZE (12): CALL TEXTFACE(1)
140 ULINE$ = "--------------------------------------------"
150 WINDOW 1,"Satellit"
160 CLS
170 LOCATE 4,6 : STR5$="E L L I P T I C A L T R A C K I N G P R O G R A M"
DrawText STR5$
180 LOCATE 8,16 : STR5$="By DF1OH and DB2OS"
DrawText STR5$
190 LOCATE 10,13 : STR5$="Macintosh Version by DJ1VA"
DrawText STR5$
200 CALL TEXTSIZE (10)
210 LOCATE 14,21 : PRINT"Version "Version$
220 CALL TEXTSIZE (12)
230 LOCATE 18,16 : PRINT "<Mode> to continue.";
300 GOSUB MenuInit
400 '
550 ' *** M A I N P R O G R A M ***
555 ' ==================================
560 ON MENU GOSUB HandleMenu : MENU ON
Idle: GOTO Idle
568 IF Key% = 5 THEN GOTO Kepler
570 ' $IGNORE ON
571 IF Key% = 8 THEN CLS: MENU RESET : END
572 IF Key% = 7 THEN CLS: MENU RESET : SYSTEM
575 ' $IGNORE OFF
580 IF Key% = 7 THEN CLS: MENU RESET : END
585 CALL TEXTSIZE (12) : CALL TEXTFACE (0)
590 DEFDBL A-W
600 DEFDBL Z
610 PI=3.14159265#:PI180=PI/180:PI081=180/PI:PI05=PI/2:PI2=2*PI
620 DEF FNASN (X)=ATN(X/SQR(1D-38-(ABS(X)<1)*(1-X*X)))
630 RE=6378
640 CLS : PRINT : PRINT "Station Location: " : PRINT
650 STATION.LON=-11.2
660 STATION.LAT=48.5
670 PRINT "Longitude ";
675 PRINT USING "###.##"; STATION.LON;
677 PRINT " Degrees"
680 PRINT "Latitude ";
685 PRINT USING "###.##"; STATION.LAT;
687 PRINT " Degrees"
690 PRINT:PRINT ULINE$
700 GOSUB NewLocation
710 '
720 IF (Key$ = "Y" OR Key$ = "y" )THEN 730 ELSE 750
730 INPUT" New Longitude : ",STATION.LON
740 INPUT" New Latitude : ",STATION.LAT
750 STATION.LON=STATION.LON*PI180
760 STATION.LAT=STATION.LAT*PI180
770 SIN.STATION.LAT=SIN(STATION.LAT)
780 COS.STATION.LAT=COS(STATION.LAT)
790 '
800 ' *** SATELLITEN-DATEN ***
805 ' ===============================
810 file$=FILES$(1,"PARA")
820 CLS
840 OPEN"I",#1,file$
850 INPUT#1,NA$,DATUM$,EPOCH.TIME,EPOCH.REV,INCLINATION,RA.OF.NODE,ECCENTRICITY,ARG.OF.PERIGEE,MEAN.ANOMALY,MEAN.MOTION,DECAY.RATE
860 INCLINATION=INCLINATION*PI180
870 SIN.INCLINATION=SIN(INCLINATION)
880 COS.INCLINATION=COS(INCLINATION)
890 GOSUB 6500 : T0=X : ' DATE STRING
900 CLOSE #1: CALL SETCURSOR (VARPTR(Cursor%(0)))
901 IF RIGHT$(file$,4)=".PAR" THEN file$= LEFT$(file$,(LEN(file$)-4))
905 WINDOW 1,NA$
910 PRINT"Current date (dd.mm.yy): ";
915 GOSUB EnterDate
918 PRINT DATUM$
920 PRINT ULINE$
930 PRINT"Time (UTC) (hhmm): ";
925 GOSUB EnterTime
938 PRINT U$
940 PRINT ULINE$
950 UH=VAL(LEFT$(U$,2)) : UM=VAL(RIGHT$(U$,2))
960 IF Key%=1 THEN 990
970 PRINT "Steprate (min) : ";
975 GOSUB EnterSteprate
980 PRINT I% : PRINT ULINE$
990 CALL TEXTSIZE (9)
IF Key% = 1 OR Key% = 2 THEN
GOTO CalcStep
ELSEIF Key% = 3 THEN
GOTO DiskData
ELSEIF Key% = 4 THEN
GOTO AzEl
ELSE
GOTO 568
END IF
AzEl:
1010 ' *** MASK FOR AZ - EL PROJECTION ***
1020 ' =======================================
1030 CLS : PRINT "- [60]"
1060 LINE (7,5) - (7,273)
1070 LOCATE 23,2
1080 LINE (7,273) - (475,273)
1105 GOSUB Scale
1106 PRINT
1110 PRINT"[0]"; TAB (19); "[90]";TAB (38) ; "[180]"; TAB (58); "[270]"; TAB(77); "[360]";
1115 PRINT TAB(7);"TIME:";TAB(20);"UTC";TAB(28);"AZ=";TAB(36);"Deg.";TAB(45);"EL=";TAB(52);"Deg.";TAB(58);"DX=" ;TAB(68);"Km";
1120 LOCATE 1,7 :PRINT NA$
1130 LOCATE 1,16 :PRINT"on";
1135 LOCATE 2, 7 :PRINT"Orbit #:"
1140 LOCATE 3, 7 :PRINT"Steprate:" I%" min"
1150 LOCATE 1,71 : PRINT "[Degrees]";
1160 GOTO 1750
CalcStep:
1180 ' *** MASK FOR REALTIME AND STEP ***
1190 ' ====================================
1200 CALL TEXTSIZE (9)
1205 CLS : PRINT" Any Key to interrupt."
1208 PRINT"_______________________________________________"
1210 PRINT TAB(5);NA$;TAB(15);"on"
1220 PRINT TAB(10);"Orbit #"
1230 PRINT TAB(5);"at";TAB(18);"UTC"
1240 PRINT:PRINT
1250 PRINT TAB(5);"Azimuth";TAB(22);"degrees"
1260 PRINT TAB(5);"Elevation";TAB(22);"degrees"
1270 PRINT TAB(5);"Distance";TAB(27);"Km"
1280 PRINT:PRINT
1290 PRINT TAB(5);"2m - shift";TAB(31);"Hz"
1300 PRINT TAB(5);"70cm - shift";TAB(31);"Hz"
1310 PRINT TAB(5);"23cm - shift";TAB(31);"Hz"
1320 PRINT TAB(5);"Time delay (2way)";TAB(42);"ms"
1330 PRINT
1340 PRINT TAB(5);"Satellite's Longitude";TAB(42);"degrees"
1350 PRINT TAB(5);"Satellite's Latitude ";TAB(42);"degrees"
1360 PRINT TAB(5);"MA (Apogee=128, Perigee=255)"
1370 XCOORD=53
1380 LOCATE 1,XCOORD : PRINT TAB(56)"DX STATE INFORMATION"
1390 LOCATE 2,XCOORD : PRINT TAB(53)"_________________ AZ _ EL _"
1400 FOR YCOORD = 3 TO 19 STEP 1
1410 READ STATE$,STATE.LAT,STATE.LON
1420 LOCATE YCOORD,53 : DrawText STATE$ : ' print STATE$
1430 NEXT YCOORD
1440 RESTORE 3366
1450 GOTO 1750
'
DiskData:
1460 ' ----------------------------------------------------
1470 ' *** MASK FOR DATA TO DISK ***
1475 ' ==============================
1480 CALL TEXTSIZE(12)
1483 PRINT "Time of end UTC (hhmm): ";
1485 GOSUB TimeOfEnd
1488 PRINT UTCEND$ : PRINT ULINE$
1490 UHEND=VAL(LEFT$(UTCEND$,2)) : UMEND=VAL(RIGHT$(UTCEND$,2))
1500 PRINT"How many days? ";
1505 GOSUB NbrOfDays
1508 PRINT DAYS:PRINT ULINE$
1510 IF DAYS < 1 THEN DAYS = 1
1520 OPEN"O",#1,file$+".ELL"
1530 CLS
1540 PRINT
1550 PRINT
1560 PRINT" CALCULATION OF THE SATELLITE ";NA$
1570 PRINT" =================================="
1580 PRINT:PRINT
1590 PRINT"Station Longitude ";STATION.LON*PI081;" degrees"
1600 PRINT"Station Latitude ";STATION.LAT*PI081;" degrees"
1610 PRINT
1620 PRINT"The Satellite ";NA$;" will be computed for ";DAYS; "DAY(S)."
1630 PRINT:PRINT
1640 ' *** TO DISK *
1650 PRINT#1,
1660 PRINT#1,
1670 PRINT#1," CALCULATION OF THE SATELLITE ";NA$
1680 PRINT#1," ====================================="
1690 PRINT#1,:PRINT#1,
1700 PRINT#1,"Station longitude ";STATION.LON*PI081;" degrees"
1710 PRINT#1,"Station latitude ";STATION.LAT*PI081;" degrees"
1720 PRINT#1,
1730 PRINT#1," The Satellite "; NA$;" will be computed for ";DAYS;"DAY(S)."
1740 PRINT#1, : PRINT#1,
1750 KZ=-1
1760 GOSUB 6500 : ' DATE STRING
1770 GOSUB 8000 : ' LONG TIME CORRECTION
1780 '
1790 GOSUB 5000 : ' TIME STRING
1799 '
1800 ' *** SUBSATEL. - POSITION ***
1805 ' =============================
1810 PE=ARG.OF.PERIGEE*PI180+DB*(DT+Z)
1820 EQ = RA.OF.NODE*PI180+PB*(DT+Z)
1830 M=MEAN.ANOMALY/360+DT*(MEAN.MOTION+ME)/2
1840 K1=Z*ME
1850 NR=INT(CSNG(M+K1))
1860 K2=M-INT(CSNG(M))
1870 M=K1+K2
1880 M=(M-INT(CSNG(M)))*PI2
1890 MA=INT(CSNG(M*255/PI2+.5))
1895 '
1900 ' *** KEPLER-EQUATION ****
1910 ' ==================================
1920 EW=M+ECCENTRICITY*SIN(M)*(1+ECCENTRICITY*COS(M))
1930 K1=(M-EW+ECCENTRICITY * SIN(EW))/(1-ECCENTRICITY * COS(EW))
1940 IF ABS(K1) < .000000001# THEN 1970
1950 EW=EW+K1
1960 GOTO 1930
1970 V=PI05-FNASN((ECCENTRICITY-COS(EW))/(ECCENTRICITY*COS(EW)-1))
1980 IF M>PI THEN V=PI2-V
1990 D1=FNASN(SIN(PE+V)*SIN.INCLINATION)
2000 A1=PI2+ATN(TAN(PE+V)*COS.INCLINATION)+EQ+PI*(COS(PE+V)<0)
2010 R=A*(1-ECCENTRICITY*COS(EW))
2020 SZ = 1.73993 + .0172027912# * X
2030 SZ=SZ-INT(CSNG(SZ/PI2))*PI2+6.30038867#*Z
2040 SAT.LON=SZ-A1
2050 SAT.LAT=D1+.003345*RE/R*SIN(2*D1)
2060 LON=INT(CSNG(SAT.LON*PI081+.5))MOD 360
2070 IF LON<-180 THEN LON=LON+360
2080 LAT=INT(CSNG(SAT.LAT*PI081+.5))
2090 SIN.SAT.LAT=SIN(SAT.LAT)
2100 COS.SAT.LAT=COS(SAT.LAT)
2110 '
2120 ' *** AZ/EL/DX/SHIFT ***
2115 ' ========================
2130 K1=PI05-FNASN(SIN.SAT.LAT*SIN.STATION.LAT+COS.SAT.LAT*COS.STATION.LAT*COS(SAT.LON-STATION.LON))
2140 EL=ATN((COS(K1)-RE/R)/SIN(K1))
2150 AZ=PI05-FNASN((SIN.SAT.LAT-SIN.STATION.LAT*COS(K1))/COS.STATION.LAT/SIN(K1))
2160 IF SIN(SAT.LON-STATION.LON)>=0 THEN AZ=PI2-AZ
2170 DX=R*SIN(K1)/COS(EL)
2180 K1=(KD-DX)/(SZ-KZ-PI2*(KZ>SZ))*.000000000243239# : KD=DX : KZ=SZ
2190 S2=INT(CSNG(K1*146000000#+.5))
2200 S7=INT(CSNG(K1*436000000#+.5))
2210 S3=INT(CSNG(K1*1268000000#+.5))
2212 CoordX = 463/360 * (PI081*AZ)+ 7
2215 CoordY = 268 - (268/60 * (PI081*EL) )+ 5
2220 EL=INT(CSNG(PI081*EL+.5))
2230 AZ=INT(CSNG(PI081*AZ+.5))
2240 DX=INT(CSNG(DX+.5))
2250 '
2260 ' *** PRINT IN FORM ***
2270 ' *** INTERRUPT-ROUTINE ***
2280 ' =============================
2290 IF INKEY$="" THEN 2360
2300 LOCATE 1,1 : PRINT" ";
2310 LOCATE 1,1 : PRINT" Interrupted. Space to Continue, Any Key to Stop. ";
2320 INTERRUPT$=INKEY$
2330 IF INTERRUPT$="" THEN 2320
2340 LOCATE 1,1 : PRINT" Any Key to Interrupt. ";
2350 IF INTERRUPT$ <> " " THEN CLS : RESET : RESTORE 3366: OLDDAY=0 : GOTO 70
2360 ON Key% GOTO 3020,3020,3390,3610
2365 '
3000 ' *** REAL AND STEP ***
3010 ' ========================
3020 LOCATE 3,18 : PRINT RIGHT$(" "+ DATUM$,10)
3030 LOCATE 4,18 : PRINT NR+EPOCH.REV
3040 LOCATE 5,8 : PRINT U$;
3050 LOCATE 8,15 : PRINT " ";
3055 LOCATE 8,15 : PRINT AZ;
3060 LOCATE 9,15 : PRINT EL;
3070 LOCATE 10,19 : PRINT DX;
3080 LOCATE 13,21 : PRINT S2;
3090 LOCATE 14,21 : PRINT S7;
3100 LOCATE 15,21 : PRINT S3;
3110 LOCATE 16,30 : PRINT INT(CSNG(2*DX/299290!)*1000 +.5);
3120 LOCATE 18,34 : PRINT LON;
3130 LOCATE 19,34 : PRINT LAT;
3140 LOCATE 20,10 : PRINT MA;" "
3150 '
3160 ' *** AZ/EL FOR DX STATE INFORMATION ***
3165 ' ==========================================
3170 FOR YCOORD=3 TO 19 STEP 1
3180 READ STATE$,STATE.LAT,STATE.LON
3190 STATE.LAT=STATE.LAT*PI180
3200 SIN.STATE.LAT=SIN(STATE.LAT)
3210 COS.STATE.LAT=COS(STATE.LAT)
3220 STATE.LON=STATE.LON*PI180
3230 K1=PI05-FNASN(SIN.SAT.LAT*SIN.STATE.LAT+COS.SAT.LAT*COS.STATE.LAT*COS(SAT.LON-STATE.LON))
3240 EL=ATN((COS(K1)-RE/R)/SIN(K1))
3250 AZ=PI05-FNASN((SIN.SAT.LAT-SIN.STATE.LAT*COS(K1))/COS.STATE.LAT/SIN(K1))
3260 IF SIN(SAT.LON-STATE.LON)>=0 THEN AZ=PI2-AZ
3270 EL=INT(CSNG(PI081*EL+.5))
3280 AZ=INT(CSNG(PI081*AZ+.5))
3290 LOCATE YCOORD,70 : PRINT AZ;
3300 LOCATE YCOORD,75 : PRINT EL;
3310 NEXT YCOORD
3320 RESTORE 3366
3330 LOCATE 1,22
3340 '
3350 '
3360 GOTO 4000
3365 '
' *** DATA FOR DX STATE INFORMATION BOARD ***
' ==============================================
' STATE LAT LON
3366 DATA "NEW YORK", 40.75, 74
DATA "SAN FRANCISCO", 37.58, 122.5
DATA "RIO DE JANEIRO", -23, 43.2
DATA "SANTIAGO DE CHILE",-33, 81
DATA "TAHITI", -18, 148
DATA "FALKLAND IS.", -52, 60
DATA "CAPE TOWN", -33.92, 341.63
DATA "SINGAPORE", 1.3, 256.15
DATA "HONG KONG", 22.2, 245.75
DATA "TOKIO", 35.75, 220.25
DATA "DARWIN", -12.33, 229.1
DATA "PERTH", -31.95, 244.13
DATA "SYDNEY", -33.88, 208.83
DATA "WELLINGTON", -41.317, 185.23
DATA "HAWAII", 21.313, 157.87
DATA "VANCOUVER", 49, 137
DATA "FAIRBANKS", 65, 147.66
' END OF DATA
3370 ' **** STORE DATA ON DISK ***
3380 ' ==============================
3390 IF DAYS=OLDDAY THEN 3450
3400 PRINT : CALL TEXTSIZE (12)
3410 PRINT TAB(8);"ORBITS from ";NA$;" for ";DATUM$
3420 PRINT" DIRECTION and DISTANCE SUB.-POSITION"
3430 PRINT"ORBIT # TIME AZ EL [km] LON LAT MA"
3440 PRINT"------------------------------------------------------"
3445 CALL TEXTSIZE (9)
3450 PRINT NR+EPOCH.REV;TAB(9);LEFT$(U$,5);" UTC";TAB(19);AZ;TAB(24);EL;TAB(28);DX;TAB(36);LON;TAB(42);LAT;TAB(48);MA
3460 IF DAYS<1 THEN CLOSE#1: GOTO 100
3470 IF UH<UHEND THEN GOTO 3500
3480 IF UM<UMEND THEN GOTO 3500
3490 IF DAYS <2 THEN CLOSE#1 : GOTO 100
3500 IF DAYS=OLDDAY THEN 3570
3510 PRINT#1,
3520 PRINT#1,TAB(10);"ORBITS from ";NA$;" for ";DATUM$
3530 PRINT#1," DIRECTION and DISTANCE SUB.-POSITION"
3540 PRINT#1,"ORBIT# TIME AZ EL [km] LON LAT MA"
3550 PRINT#1,"------------------------------------------------------"
3560 OLDDAY=DAYS
3570 IF EL<=-2 THEN 3590
3580 PRINT#1,NR+EPOCH.REV;TAB(9);LEFT$(U$,5);" UTC";TAB(19);AZ;TAB(24);EL;TAB(28);DX;TAB(36);LON;TAB(42);LAT;TAB(48);MA
3590 GOTO 4000
3600 ' *** AZ-EL PLOT ***
3605 ' ====================
3610 GOSUB PlotSat
3660 LOCATE 1,7 :PRINT NA$
3665 LOCATE 1,16 :PRINT"on";
3669 LOCATE 1,19 : PRINT DATUM$;
3670 LOCATE 2,14 : PRINT NR+EPOCH.REV;
3680 LOCATE 25,12 : PRINT U$;
3690 PRINT TAB (31) AZ;
3700 PRINT TAB (48) EL;
3710 PRINT TAB (61) DX;
3720 '
4000 ' *** INCREMENT TIME ***
4010 ' ========================
4020 IF Key%<>1 THEN 4060
4022 ON TIMER (8) GOSUB Increment
4026 TIMER ON
4030 IdleLoop:
GOTO IdleLoop
4035 ' TIMER OFF
4040 IF US>59 THEN UM=UM+1 : US=US-60
4050 GOTO 4070
4060 US=0 : UM=UM+I%
4070 IF UM>59 THEN UM= UM-60: UH=UH+1
4080 IF UH>23 THEN UH=0 : GOSUB 6000 : ' KALENDER
4090 IF UM>59 THEN GOTO 4070
4100 GOTO 1790
4110 '
5000 ' *** UTC-STRING/TIME ***
5010 ' ==========================
5020 K1=100+UH : K2 = 100+UM : K3 = 100 + US
5030 U$=RIGHT$(STR$(K1),2)+":"+RIGHT$(STR$(K2),2)+":"+RIGHT$(STR$(K3),2)
5040 Z=(UH+UM/60 + US/3600)/24
5050 RETURN
5060 '
6000 ' *** JULIAN DATE ***
6010 ' =====================
6020 DAYS=DAYS-1
6030 K1=TX : K2=MX : K3 = X : TX = 1 : MX =1 : JX = JX+1 : GOSUB 6540
6040 IF X = K3+1 THEN 6080
6050 MX=K2+1 : JX =JX-1 : GOSUB 6540
6060 IF X = K3+1 THEN 6080
6070 TX = K1+1 : MX=K2 : GOSUB 6540
6080 DATUM$=STR$(TX)+"."+RIGHT$(STR$(MX),LEN(STR$(MX))-1)+"."+RIGHT$(STR$(JX),4)
6090 DATUM$=RIGHT$(DATUM$,LEN(DATUM$)-1)
6100 GOSUB 8000
6110 RETURN
6120 '
6500 K1=VAL(DATUM$)
6510 TX=INT(CSNG(K1))
6520 MX=INT(CSNG(VAL(RIGHT$(DATUM$,LEN(DATUM$)-LEN(STR$(TX))))))
6530 JX=INT(CSNG(VAL(RIGHT$(DATUM$,LEN(DATUM$)-LEN(STR$(TX)+STR$(MX))))))
6540 MY=MX+1 : JY=JX
6550 IF MX < 3 THEN MY=MY+12 : JY = JY-1
6560 X=INT(CSNG(365.25*JY))+INT(CSNG(30.6*MY))+TX-694024!-INT(CSNG(.75*INT(CSNG(JY/100+1))))
6570 RETURN
6580 '
8000 ' *** LONG-TIME CORRECTION ***
8010 ' ===============================
8020 DT=X-T0-EPOCH.TIME
8030 ME=MEAN.MOTION+DECAY.RATE*DT
8040 TU = 2880/(MEAN.MOTION+ME+DB/PI)
8050 K1=TU/84.491
8060 K2=K1^(7/3)*(1-ECCENTRICITY*ECCENTRICITY)^2
8070 K3=DB
8080 DB=.0869452/K2*(5*COS.INCLINATION*COS.INCLINATION-1)
8090 IF ABS(K3-DB)>.0000001 THEN 8040
8100 PB= -.17389046#/K2*COS.INCLINATION
8110 A = RE*K1^(2/3)
8120 RETURN
8130 '
9000 ' *** CURSOR ADRESSING ***
9010 ' ==========================
9020 LOCATE YCOORD,XCOORD : ' VTAB(FIX(ycoord)) HTAB(FIX(xcoord))
9030 RETURN
9040 '
10205 '
12000 ' *** ERROR TRAPPING ROUTINE ***
12010 ' ===============================
12020 IF ERR=53 OR ERR=64 THEN RESUME 810
12030 item% = 0
STR1$ = "Error #" + STR$(ERR)
STR2$ = " in Line " + STR$(ERL)
STR3$ = " "
STR4$ = "Resume Program..."
12040 Alert ref%,3,308,item%,STR1$,STR2$,STR3$,STR4$
12050 '
12060 RESUME 70
12070 END
14900 '
14950 ' *** Utility for printing parameters ***
14999 ' =====================================
15000 CLS : PRINT:PRINT:PRINT TAB(10) NA$
15100 PRINT : PRINT :
15150 PRINT TAB (10) "Epoch.Time = ";EPOCH.TIME
15200 PRINT TAB (10) "Reference Date = ";DATUM$
15300 PRINT TAB (10) "Inclination = ";INCLINATION
15400 PRINT TAB (10) "RA of Node = ";RA.OF.NODE
15500 PRINT TAB (10) "Excentricity = ";EXCENTRICITY
15600 PRINT TAB (10) "Arg. of Perigee = ";ARG.OF.PERIGEE
15700 PRINT TAB (10) "Mean Anomaly = ";MEAN.ANOMALY
15800 PRINT TAB (10) "Mean Motion = ";MEAN.MOTION
15900 PRINT TAB (10) "Decay Rate = ";DECAY.RATE
16000 PRINT TAB (10) "Epoch Revolution = ";EPOCH.REV
16001 END
16900 '
16950 ' *** Utility for changing filetype ***
16999 ' ==================================
17000 CLS
17010 file$ = FILES$(1)
17020 INPUT "ENTER NEW FILETYPE: ", passwd$
17030 NAME file$ AS file$,passwd$
17040 PRINT "ok"
17050 END
' ******** S U B R O U T I N E S *********
MenuInit:
20000 '
20010 TEXTMODE (0)
20020 ' MENU 2,0,0,""
20030 MENU 3,0,0,""
20032 MENU 4,0,0,""
20033 MENU 5,0,0,""
20035 ' Turn OFF normal Menus
20100 MENU 4,0,1,"Mode"
20110 MENU 4,1,1,"Realtime Tracking"
20120 MENU 4,2,1,"Step Tracking"
20130 MENU 4,3,1,"Data to Disk"
20140 MENU 4,4,1,"AZ/EL Projection"
20150 MENU 4,5,1,"New Parameters"
20152 MENU 4,6,1,"-----------------"
20155 MENU 4,7,1,"Exit to Desktop"
' $IGNORE ON
20160 MENU 4,8,1,"Exit to Basic"
' $IGNORE OFF
20170 MENU 4,6,0
CmdKey 4,1,"R"
CmdKey 4,2,"S"
CmdKey 4,3,"D"
CmdKey 4,4,"A"
CmdKey 4,5,"N"
CmdKey 4,7,"Q"
true = -1
20190 RETURN
HandleMenu:
Key% = MENU(1)
MENU 4,0,0 : ' disable menu
GOTO 568
RETURN
Scale:
TEXTMODE (1)
YCOORD = 23 -23/60*20
LOCATE YCOORD, 1
PRINT "- [20]";
YCOORD = 23 -23/60*40
LOCATE YCOORD, 1
PRINT "- [40]";
XCOORD = 77/360 * 90 +2
GOSUB Bar
XCOORD = 77/360 * 180+ 2
GOSUB Bar
XCOORD = 77/360 * 270+2
GOSUB Bar
XCOORD = 77+2
GOSUB Bar
TEXTMODE (0)
RETURN
Bar:
LOCATE 23, XCOORD
PRINT "|";
RETURN
35000 EnterDate:
DAY$ = DATE$
YEAR$ = RIGHT$(DAY$,2)
MON$ = LEFT$(DAY$,2)
IF LEFT$(MON$,1) = "0" THEN MON$ = RIGHT$(MON$,1)
DAY$ = MID$(DAY$,4,2)
IF LEFT$(DAY$,1) = "0" THEN DAY$ = RIGHT$(DAY$,1)
DATUM$ = DAY$+"."+MON$+"."+YEAR$
WINDOW 2, "Current date",(270,75) - (490,125),1
PRINT " Enter current Date (dd.mm.yy): "
CALL TEXTFACE (1)
EDIT FIELD 1, DATUM$,(15,25) - (83,40)
WHILE DIALOG (0) = 1 : WEND
BUTTON 1,2, "OK",(105,20) - (135,45)
WHILE DIALOG (0) <> 1 : WEND
DATUM$ = EDIT$ (1)
ButtonPushed = DIALOG(1)
WINDOW CLOSE 2
CALL TEXTFACE (0)
RETURN
36000 EnterTime:
U$ = TIME$
HH$ = LEFT$(U$,2)
MM$ = MID$(U$,4,2)
U$ = HH$+MM$
WINDOW 3, "Time",(300,75) - (480,125),1
PRINT "Enter Time (UTC) (hhmm): "
CALL TEXTFACE (1)
EDIT FIELD 1, U$,(15,25) - (60,40)
WHILE DIALOG (0) = 1 : WEND
BUTTON 1,2, "OK",(105,20) - (135,45)
WHILE DIALOG (0) <> 1 : WEND
U$ = EDIT$ (1)
ButtonPushed = DIALOG(1)
WINDOW CLOSE 3
CALL TEXTFACE (0)
RETURN
37000 EnterSteprate:
WINDOW 4, "Steprate ",(300,75) - (470,125),1
PRINT " Enter Steprate (min): "
CALL TEXTFACE (1)
EDIT FIELD 1, "60",(15,25) - (48,40)
WHILE DIALOG (0) = 1 : WEND
BUTTON 1,2, "OK",(105,20) - (135,45)
WHILE DIALOG (0) <> 1 : WEND
I% = VAL(EDIT$ (1))
ButtonPushed = DIALOG(1)
WINDOW CLOSE 4
CALL TEXTFACE (0)
RETURN
38000 TimeOfEnd:
WINDOW 3, "Time of End",(300,75) - (480,125),1
PRINT "Enter Time (UTC) (hhmm): "
CALL TEXTFACE (1)
EDIT FIELD 1, "2359",(15,25) - (60,40)
WHILE DIALOG (0) = 1 : WEND
BUTTON 1,2, "OK",(105,20) - (135,45)
WHILE DIALOG (0) <> 1 : WEND
UTCEND$ = EDIT$ (1)
ButtonPushed = DIALOG(1)
WINDOW CLOSE 3
CALL TEXTFACE (0)
RETURN
39000 NbrOfDays:
WINDOW 2, "Number of Days",(300,75) - (480,125),1
PRINT "Number of Days: "
CALL TEXTFACE (1)
EDIT FIELD 1, "5",(15,25) - (40,40)
WHILE DIALOG (0) = 1 : WEND
BUTTON 1,2, "OK",(105,20) - (135,45)
WHILE DIALOG (0) <> 1 : WEND
DAYS = VAL(EDIT$ (1))
ButtonPushed = DIALOG(1)
WINDOW CLOSE 2
CALL TEXTFACE (0)
RETURN
40000 NewLocation:
CALL TEXTFACE (1)
WINDOW 4, "Station Location",(270,75) - (480,125),1
PRINT "Do you wish a new Location? "
CALL TEXTFACE (1)
WHILE DIALOG (0) = 1 : WEND
BUTTON 1,1, "Yes",(55,20) - (85,45),1
BUTTON 2,2, "No", (105,20) - (135,45),1
WHILE DIALOG (0) <> 1 : WEND
ButtonPushed = DIALOG(1)
IF ButtonPushed = 1 THEN Key$ = "Y" ELSE Key$ = "N"
WINDOW CLOSE 4
CALL TEXTFACE (0)
RETURN
41000 PlotSat:
IF CoordY > 273 THEN RETURN
PSET(CoordX,CoordY),33
RETURN
42000 Increment: ' increments time
US=US+10
GOTO 4040
RETURN
Kepler:
50000 '
50010 ' Sat Nov 28, 1987 07:31:23
50020 GOTO 50090
' ******************************
' ** Programm zur Eingabe der **
' ** KEPLER Elemente **
' ** 19.7.87 **
' ******************************
50080 '
50090 CLS : ' DEFDBL A-Z
50100 PRINT " Satellite Parameters "
50105 PRINT "Use decimal point <.> and include leading zeroes."
50110 PRINT: INPUT "Name of Satellite : ", NA$
50120 INPUT "Reference Date (dd.mm.yy): ", DATUM$
50130 PRINT "Enter Epoch Time"
50140 INPUT " hours : "; HOURS
50150 INPUT " minutes : "; MINUTES
50160 INPUT " seconds : "; SECONDS
50170 EPOCH.TIME =(HOURS+MINUTES/60 + SECONDS/3600)/24
50180 PRINT : PRINT TAB(12) "Epoch.Time = "EPOCH.TIME
50190 IF EPOCH.TIME > 0 THEN GOTO 50220
50200 PRINT
50210 INPUT "Epoch.Time : ",EPOCH.TIME
50220 INPUT "Inclination (deg) : ",INCLINATION
50230 INPUT "RA of Node (deg) : ",RA.OF.NODE
50240 INPUT "Excentricity : ",EXCENTRICITY
50250 INPUT "Arg of Perigee (deg) : ",ARG.OF.PERIGEE
50260 INPUT "Mean Anomaly (deg) : ",MEAN.ANOMALY
50270 INPUT "Mean Motion (rev/day) : ",MEAN.MOTION
50280 INPUT"Decay Rate (rev/day^2) : ",DECAY.RATE
50290 INPUT "Epoch Rev. : ",EPOCH.REV
50500 CLS : PRINT:PRINT:PRINT TAB(10) NA$
50510 PRINT : PRINT :
50515 PRINT TAB (10) "Epoch.Time = ";EPOCH.TIME
50520 PRINT TAB (10) "Reference Date = ";DATUM$
50530 PRINT TAB (10) "Inclination = ";INCLINATION
50540 PRINT TAB (10) "RA of Node = ";RA.OF.NODE
50550 PRINT TAB (10) "Excentricity = ";EXCENTRICITY
50560 PRINT TAB (10) "Arg. of Perigee = ";ARG.OF.PERIGEE
50570 PRINT TAB (10) "Mean Anomaly = ";MEAN.ANOMALY
50580 PRINT TAB (10) "Mean Motion = ";MEAN.MOTION
50590 PRINT TAB (10) "Decay Rate = ";DECAY.RATE
50600 PRINT TAB (10) "Epoch Revolution = ";EPOCH.REV
50610 PRINT : PRINT TAB (10) : INPUT "Is this correct? (Y/N) ",Key$
50620 IF Key$ = "Y" OR Key$ = "y" THEN GOTO 50700
50630 IF Key$ = "N" OR Key$ = "n" THEN GOTO 50090
50640 GOTO 50610
50700 NB$ = NA$+".PAR"
51000 OPEN "O",#1,NB$
51010 WRITE#1,NA$,DATUM$,EPOCH.TIME;EPOCH.REV;INCLINATION;RA.OF.NODE;EXCENTRICITY;ARG.OF.PERIGEE;MEAN.ANOMALY;MEAN.MOTION;DECAY.RATE
51020 CLOSE#1
51030 NAME NB$ AS NB$,"PARA"